/*
ID: simplyz2
LANG: C
TASK: transform
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_LEN 11
char before[MAX_LEN][MAX_LEN], after[MAX_LEN][MAX_LEN];
int len;

int
done(char (*rt)[MAX_LEN])
{
	int i, j;
	for(i=0; i<len; i++)
		for(j=0; j<len; j++)
			if(rt[i][j] != after[i][j])
				return 0;
	return 1;
}

void
rotate_90(char (*squ)[MAX_LEN], char (*rt)[MAX_LEN])
{
	int i, j;
	for(i=0; i<len; i++) 
		for(j=0; j<len; j++)
			rt[i][j] = squ[len-j-1][i];
}

void
rotate_180(char (*squ)[MAX_LEN], char (*rt)[MAX_LEN])
{
	int i, j;
	for(i=0; i<len; i++)
		for(j=0; j<len; j++)
			rt[i][j] = squ[len-i-1][len-j-1];
}

void
rotate_270(char (*squ)[MAX_LEN], char (*rt)[MAX_LEN])
{
	int i, j;
	for(i=0; i<len; i++)
		for(j=0; j<len; j++)
			rt[i][j] = squ[j][len-i-1];
}

void
hor_ref(char (*squ)[MAX_LEN], char (*rt)[MAX_LEN])
{
	int i, j;
	for(i=0; i<len; i++)
		for(j=0; j<len; j++)
			rt[i][j] = squ[i][len-j-1];
}

int 
solve()
{
	char tmp[MAX_LEN][MAX_LEN], ret[MAX_LEN][MAX_LEN];
	rotate_90(before, ret);
	if(done(ret))
		return 1;
	rotate_180(before, ret);
	if(done(ret))
		return 2;
	rotate_270(before, ret);
	if(done(ret))
		return 3;
	hor_ref(before, ret);
	if(done(ret))
		return 4;
	hor_ref(before, tmp);
	rotate_90(tmp, ret);
	if(done(ret))
		return 5;
	rotate_180(tmp, ret);
	if(done(ret))
		return 5;
	rotate_270(tmp, ret);
	if(done(ret))
		return 5;
	if(done(before))
		return 6;
	return 7;
}

int
main(int argc, char **argv)
{
	int i;
	freopen("transform.in", "r", stdin);
	freopen("transform.out", "w", stdout);
	while(scanf("%d", &len) != EOF) {
		for(i=0; i<len; i++) 
			scanf("%s", before[i]);
		for(i=0; i<len; i++)
			scanf("%s", after[i]);
		printf("%d\n", solve());
	}
	return 0;
}
